package com.cskaoyan.javase.array._4operation._0traverse;

import java.util.Arrays;

/**
 * 一般来说遍历数组，普遍使用for循环
 * 但是Java中提供了一种语法更简洁，遍历效率更高的方式：增强for循环（也叫foreach）
 * 增强for循环是一种容器（数组+集合）的遍历方式，它是一种迭代器
 * 语法：
 *      for(数据类型 变量名 : 容器名){
 *          // 遍历体
 *      }
 * 解释:
 *      1.容器名表示被遍历的容器的名字,可以是数组,也可以是集合
 *      2.数据类型是容器中元素的数据类型
 *      3.变量名代表容器中的每一个元素
 *      所以在foreach的遍历体中,可以直接打印元素
 *
 * 增强for的优点:
 *      1.语法更简洁,而且更高效
 *      2.使用更方便,配合快捷键iter自动生成增强for遍历容器
 *      注: iter是迭代器iterator的缩写
 *
 * 缺点:
 *      1.增强for是迭代器,它仅仅是一种容器的遍历方式,就是为了访问元素而存在的.它不能用于修改容器中的元素.
 *      2.勉强算一个缺点:
 *          增强for不关心数组下标,也没有数组下标
 *          所以如果需要使用数组的下标,就不能用增强for了.
 *
 * @since 09:53
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo4 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        // 'for' loop replaceable with 'foreach'
        for (int i = 0; i < arr.length; i++) {
            arr[i] = 100;
        }
        /*
            Arrays.toString方法是遍历输出元素
            for循环和增强for循环只是一种遍历的方式
         */
        System.out.println(Arrays.toString(arr));
        System.out.println("-----------");

        // 增强for肯定也不能遍历null数组
        // arr = null;
        // arr = new int[0];
        for (int ele : arr) {
            // ele就是增强for中的局部变量
            // System.out.println(ele);
            ele = 666;
        }
        System.out.println(Arrays.toString(arr));
    }
}
